#include "head.h"

// 顺序表的创建
S_arr_list *S_Arr_Init(void) {
    S_arr_list *L = (S_arr_list *)malloc(sizeof(S_arr_list));
    if (L == NULL) {
        printf("顺序表创建失败\n");
        return NULL;
    }
    memset(L->data, 0, ARR_MAX_SIZ * sizeof(F_data));
    L->len = 0;
    return L;
}

// 顺序表的插入
int S_Arr_insert(S_arr_list *L, int pos, F_data data) {
    if (L == NULL) {
        printf("顺序表 为 NULL\n");
        return -1;
    }
    if (L->len >= ARR_MAX_SIZ) {
        printf("顺序表已满\n");
        return -1;
    }
    if (pos < 1 || pos > L->len + 1) {
        printf("插入位置不合法\n");
        return -1;
    }

    // 从插入点开始后移数据
    for (int i = L->len; i >= pos; i--) {
        L->data[i] = L->data[i - 1];
    }

    L->data[pos - 1] = data;
    L->len++;
    return 0;
}

// 顺序表的删除
F_data S_Arr_delete(S_arr_list *L, int pos) {
    F_data removed_data = {0};

    if (L == NULL) {
        printf("顺序表 为 NULL\n");
        return removed_data;
    }
    if (L->len == 0) {
        printf("顺序表内无数据\n");
        return removed_data;
    }
    if (pos < 1 || pos > L->len) {
        printf("删除位置不合法\n");
        return removed_data;
    }

    removed_data = L->data[pos - 1];

    // 将后续数据前移
    for (int i = pos; i < L->len; i++) {
        L->data[i - 1] = L->data[i];
    }

    L->len--;
    return removed_data;
}



// 顺序表的遍历
void S_Arr_printf(S_arr_list *L) {
    if (L == NULL) {
        printf("顺序表 为 NULL\n");
        return;
    }
    if (L->len == 0) {
        printf("顺序表内无数据\n");
        return;
    }

    for (int i = 0; i < L->len; i++) {
        printf("班次: %d 机型: %s 起点站: %s 终点站: %s 起飞时间: %02d:%02d 到达时间: %02d:%02d 飞行时间: %s 票价: %d 载客量: %d 剩余座位: %d 是否飞: %c\n",
               L->data[i].id, L->data[i].flighttype, L->data[i].startcity, L->data[i].arrivecity,
               L->data[i].starttime[0], L->data[i].starttime[1], L->data[i].arrivetime[0], L->data[i].arrivetime[1],
               L->data[i].flytime, L->data[i].value, L->data[i].maxNUM, L->data[i].leftbuyersa, L->data[i].whetherfly);
    }
}
